iT邦幫忙

2022 iThome 鐵人賽

DAY 9
1

「這幾天寫陣列的題目,還算是有趣吧?」

「對呀!從陣列內學到了很多有趣的作法」看得出曉欣在家裡練習時,又重複看了很多次《Kotlin Collection全方位解析攻略 : 精通原理及實戰,寫出流暢好維護的程式》這本書。

「今天我們來嘗試這一題看看」夏天邊說,邊打開了 9. Palindrome Number 這題

「嗯⋯⋯如果用數學的方式去算,也不是算不出來,可是感覺好麻煩。」

「那我們來嘗試一個新的資料結構:字串。簡單的說,你可以將字串當作是處理一段文字。在 Kotlin 裡面,如果是一段文字的話,那將這段文字反轉過來,可以直接使用 reversed()

「那這樣的話,不就很簡單嗎?」菁菁邊說邊寫出答案

class Solution {
    fun isPalindrome(x: Int): Boolean {
        return x.toString().reversed() == x.toString()
    }
}

「菁菁不對啦!還有負數的狀況呀」「對耶!原來如此」

class Solution {
    fun isPalindrome(x: Int): Boolean {
        if (x < 0) {
            return false
        }
        return x.toString().reversed() == x.toString()
    }
}

「沒錯!兩位配合的越來越好了!」

「謝謝老師⋯⋯不是,謝謝夏姐誇獎。」

「當然了,還可以這樣寫」

class Solution {  
    fun isPalindrome(x: Int) = when {  
        x < 0 -> false  
        else -> x.toString().reversed() == x.toString()  
    }  
}

「既然前面這題這麼快就寫出來了,那麼這一題應該也不是什麼難事」夏天打開 7. Reverse Integer

兩位討論了一陣,很快地寫出了解答

class Solution {
    fun reverse(x: Int): Int {
        val ret = if (x < 0) {
            (x * -1L).toString().reversed().toLong() * -1
        } else {
            x.toString().reversed().toLong()
        }
        return ret.toInt()
    }
}

送出答案之後,曉欣很疑惑是哪邊錯了。菁菁倒是很快地察覺到了問題。

「啊!題目有特別提到:If reversing x causes the value to go outside the signed 32-bit integer range [-2^31, 2^31 - 1], then return 0

「這個是什麼意思呀?」曉欣不解地問。

「有時候一個數字原本很小,翻轉過之後可能會變大很多。像是 1119 翻轉之後變成 9111 這樣。如果一個數字翻轉後超過 2^31 ,那我們就要回傳 0」菁菁開始修改答案

class Solution {
    fun reverse(x: Int): Int {
        val ret = if (x < 0) {
            (x * -1L).toString().reversed().toLong() * -1
        } else {
            x.toString().reversed().toLong()
        }
        return if (ret > 0x7fffffff || ret < -0x7fffffff) 0 else ret.toInt()
    }
}

「原來如此!寫程式要注意的細節好多!」

「對呀!字串是不是挺有趣的?」夏天笑著說

「感覺跟 Collection 有點像!一樣可以做 reversed() 之類的操作」

「不只是可以做 reversed() 喔!」夏天開啟了新題目: 1108. Defanging an IP Address

「這題的話,可以用 replace() 這個函數很快的做出來」

class Solution {
    fun defangIPaddr(address: String) =
        address.replace(".","[.]")
}

「今天新學字串這個資料格式,先讓兩位消化一下,之後還有很多好玩的題目!」


上一篇
Day 08:大量的陣列題目:27、66、217
下一篇
Day 10:開始遞迴:771、58、509
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言